package com.innerclass_;

/**
 * @Author 小闽
 * @Date 2024/9/19 18:45
 * @PackageName: com.innerclass_
 * @ClassName: MemberInnerClass
 * @Description: 成员内部类
 * @Version 1.0
 */
public class MemberInnerClass {
    public static void main(String[] args) {
        Outer06 outer06 = new Outer06();
        outer06.test();

        // 外部其他类，使用成员内部类的三种方式
        // outer06.new Inner02(); 相当于把new Inner02()当做是outer06成员
        Outer06.InnerClass02 innerClass02 = outer06.new InnerClass02();
        // 第二种方式 在外部类中，编写一个方法，可以返回Inner06对象
        outer06.getInnerClass02Instance();
        // 第三种访问方式
        Outer06.InnerClass02 innerClass021 = new Outer06().new InnerClass02();
        innerClass02.say();
    }
}

class Outer06{ // 外部类
    private int n1 = 10;
    public String name = "张三";
    public void hi(){
        System.out.println("hi()方法被执行...");
    }
    // 这里的InnerClass2是一个成员内部类，即既没有在方法中又没有在代码块中，而是作为成员变量在外部类中
    // 可以添加任意访问修饰符（public、protected、默认、private）因为它的地位就是一个成员。
    class InnerClass02{ // 成员内部类
        public void say(){
            System.out.println("Outer06的n1=" +n1 + "\n" + "Outer06的name=" + name);
            hi();
        }
    }
    public InnerClass02 getInnerClass02Instance(){
        return new InnerClass02();
    }

    // 写一个test方法去实例化InnerClass02类对象
    public void test(){
        InnerClass02 innerClass02 = new InnerClass02();
        innerClass02.say();
    }
}
